Micron Document
Aleph Git

Node / reticulum / sideband / files / docs / example_plugins / raspi_telemetry.py

Displaying Raw • Download

docs/example_plugins/raspi_telemetry.py HEAD (8b8a5035) Text, 6.45 KB

T8b949e# This is a basic Raspberry Pi telemetry plugin
T8b949e# example that you can build upon to
T8b949e# implement your own telemetry plugins.

Tff7b72import T7ee787os
Tff7b72import T7ee787RNS
Tff7b72import T7ee787time
Tff7b72import T7ee787psutil
Tff7b72import T7ee787shutil
Tff7b72from T7ee787threading Tff7b72import Te6edf3Thread
Tff7b72import T7ee787urllibT7ee787.T7ee787requestTff7b72, T7ee787json

Tff7b72class T56d364RasPiTelemetryPluginTb4b4b4(Te6edf3SidebandTelemetryPluginTb4b4b4)Tb4b4b4:
Te6edf3plugin_name Tff7b72= Ta5d6ff"Ta5d6ffraspi_telemetryTa5d6ff"

Tff7b72def Td2a8ffstartTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# Do any initialisation work here
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRaspberry Pi Telemetry plugin starting...Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinitialise_valuesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpower_stats Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffstorage_stats Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8fftarget_disk Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffblkidTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffmmcblk0p2Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflabelTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSD CardTa5d6ff"Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffshould_run Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffupdate_thread Tff7b72= Te6edf3ThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ffupdate_jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_threadTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)

T8b949e# And finally call start on superclass
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffstopTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# Do any teardown work here
Tff7b72selfTff7b72.Td2a8ffshould_run Tff7b72= Tff7b72False

T8b949e# And finally call stop on superclass
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstopTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffinitialise_valuesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbattery_percent Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffpower_production Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffpower_consumption Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffbattery_charging Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffbattery_temperature Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffuptime Tff7b72= Tff7b72None

Tff7b72def Td2a8ffupdate_jobTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72while Tff7b72selfTff7b72.Td2a8ffshould_runTb4b4b4:
Tff7b72tryTb4b4b4:
T8b949e# Update uptime
Tff7b72selfTff7b72.Td2a8ffuptime Tff7b72= Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72-Te6edf3psutilTff7b72.Td2a8ffboot_timeTb4b4b4(Tb4b4b4)Tb4b4b4)

T8b949e# Update power values if enabled
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpower_statsTb4b4b4:
Tff7b72with Te6edf3urllibTff7b72.Td2a8ffrequestTff7b72.Td2a8ffurlopenTb4b4b4(Ta5d6ff"Ta5d6ffhttp://some_host/status.jsonTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3urlTb4b4b4:
Te6edf3data Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3urlTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpower_production Tff7b72= Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffsolar_yieldTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpower_consumption Tff7b72= Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffinverter_loadTa5d6ff"Tb4b4b4]Tff7b72+Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffdc_consumptionTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffbattery_charging Tff7b72= Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffbattery_currentTa5d6ff"Tb4b4b4] Tff7b72>Tff7b72= T79c0ff0.0
Tff7b72selfTff7b72.Td2a8ffbattery_charge Tff7b72= Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffbattery_chargeTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffbattery_temperature Tff7b72= Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffbattery_temperatureTa5d6ff"Tb4b4b4]

Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while updating plugin telemetry: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)

Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff15Tb4b4b4)

Tff7b72def Td2a8ffupdate_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3telemeterTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3telemeter Tff7b72!= Tff7b72NoneTb4b4b4:

Tff7b72if Tff7b72selfTff7b72.Td2a8ffpower_statsTb4b4b4:
T8b949e# Create power consumption sensor
Te6edf3telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffpower_consumptionTa5d6ff"Tb4b4b4)
Te6edf3telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffpower_consumptionTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupdate_consumerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpower_consumptionTb4b4b4, Te6edf3type_labelTff7b72=Ta5d6ff"Ta5d6ffPower consumptionTa5d6ff"Tb4b4b4)

T8b949e# Create power production sensor
Te6edf3telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffpower_productionTa5d6ff"Tb4b4b4)
Te6edf3telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffpower_productionTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupdate_producerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpower_productionTb4b4b4, Te6edf3type_labelTff7b72=Ta5d6ff"Ta5d6ffSolar productionTa5d6ff"Tb4b4b4, Te6edf3custom_iconTff7b72=Ta5d6ff"Ta5d6ffsolar-power-variantTa5d6ff"Tb4b4b4)

T8b949e# Create battery sensor
Te6edf3telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffbatteryTa5d6ff"Tb4b4b4)
Te6edf3telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffbatteryTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffdata Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffcharge_percentTa5d6ff"Tb4b4b4: Tffa657roundTb4b4b4(Tff7b72selfTff7b72.Td2a8ffbattery_chargeTb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffchargingTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffbattery_chargingTb4b4b4}

T8b949e# Create NVM sensor if enabled
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstorage_statsTb4b4b4:
Te6edf3mount_point Tff7b72= Tff7b72None
Tff7b72for Te6edf3partition Tff7b72in Te6edf3psutilTff7b72.Td2a8ffdisk_partitionsTb4b4b4(Tffa657allTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fftarget_diskTb4b4b4[Ta5d6ff"Ta5d6ffblkidTa5d6ff"Tb4b4b4] Tff7b72in Te6edf3partitionTff7b72.Td2a8ffdeviceTb4b4b4:
Te6edf3mount_point Tff7b72= Te6edf3partitionTff7b72.Td2a8ffmountpoint
Tff7b72break
Tff7b72if Te6edf3mount_pointTb4b4b4:
Te6edf3st Tff7b72= Te6edf3shutilTff7b72.Td2a8ffdisk_usageTb4b4b4(Te6edf3mount_pointTb4b4b4)
Te6edf3telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffnvmTa5d6ff"Tb4b4b4)
Te6edf3telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffnvmTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupdate_entryTb4b4b4(Te6edf3capacityTff7b72=Te6edf3stTff7b72.Td2a8fftotalTb4b4b4, Te6edf3usedTff7b72=Te6edf3stTff7b72.Td2a8ffusedTb4b4b4, Te6edf3type_labelTff7b72=Tff7b72selfTff7b72.Td2a8fftarget_diskTb4b4b4[Ta5d6ff"Ta5d6fflabelTa5d6ff"Tb4b4b4]Tb4b4b4)

T8b949e# Create RAM sensors
Te6edf3ms Tff7b72= Te6edf3psutilTff7b72.Td2a8ffvirtual_memoryTb4b4b4(Tb4b4b4)
Te6edf3telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6fframTa5d6ff"Tb4b4b4)
Te6edf3telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6fframTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupdate_entryTb4b4b4(Te6edf3capacityTff7b72=Te6edf3msTff7b72.Td2a8fftotalTb4b4b4, Te6edf3usedTff7b72=Te6edf3msTff7b72.Td2a8ffusedTb4b4b4, Te6edf3type_labelTff7b72=Ta5d6ff"Ta5d6ffRAMTa5d6ff"Tb4b4b4)

T8b949e# Create CPU sensor
Te6edf3a Tff7b72= Te6edf3psutilTff7b72.Td2a8ffgetloadavgTb4b4b4(Tb4b4b4)
Te6edf3cps Tff7b72= T79c0ff0Tb4b4b4; Te6edf3cpms Tff7b72= T79c0ff5
Tff7b72for Te6edf3m Tff7b72in Tffa657rangeTb4b4b4(Te6edf3cpmsTb4b4b4)Tb4b4b4:
Te6edf3cps Tff7b72+Tff7b72= Te6edf3psutilTff7b72.Td2a8ffcpu_percentTb4b4b4(Tb4b4b4)Tff7b72/T79c0ff100.0
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.05Tb4b4b4)
Te6edf3cp Tff7b72= Te6edf3cpsTff7b72/Te6edf3cpms

Te6edf3telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffprocessorTa5d6ff"Tb4b4b4)
Te6edf3telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffprocessorTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupdate_entryTb4b4b4(Te6edf3current_loadTff7b72=Te6edf3cpTb4b4b4, Te6edf3clockTff7b72=Tffa657roundTb4b4b4(Te6edf3psutilTff7b72.Td2a8ffcpu_freqTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffcurrentTff7b72*T79c0ff1e6Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4, Te6edf3load_avgsTff7b72=Tb4b4b4[Te6edf3aTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3aTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4, Te6edf3aTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4]Tb4b4b4, Te6edf3type_labelTff7b72=Ta5d6ff"Ta5d6ffCPUTa5d6ff"Tb4b4b4)

T8b949e# Create custom sensor for uptime
Te6edf3telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4)
Te6edf3telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupdate_entryTb4b4b4(Tff7b72selfTff7b72.Td2a8ffuptimeTb4b4b4, Te6edf3type_labelTff7b72=Ta5d6ff"Ta5d6ffUptime isTa5d6ff"Tb4b4b4, Te6edf3custom_iconTff7b72=Ta5d6ff"Ta5d6fftimer-refresh-outlineTa5d6ff"Tb4b4b4)

T8b949e# Read temperature using built-in sensor
Tff7b72tryTb4b4b4:
Te6edf3cpu_temp_path Tff7b72= Ta5d6ff'Ta5d6ff/sys/class/thermal/thermal_zone0/tempTa5d6ff'
Tff7b72with Tffa657openTb4b4b4(Te6edf3cpu_temp_pathTb4b4b4) Tff7b72as Te6edf3fTb4b4b4: Te6edf3temp Tff7b72= Tffa657intTb4b4b4(Te6edf3fTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72/ T79c0ff1000.0
Te6edf3telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6fftemperatureTa5d6ff"Tb4b4b4)
Te6edf3telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6fftemperatureTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffdata Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffcTa5d6ff"Tb4b4b4: Tffa657roundTb4b4b4(Te6edf3tempTb4b4b4, T79c0ff2Tb4b4b4)Tb4b4b4}
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffGetting temperature reading failed: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
T8b949e# Network Interfaces
Tff7b72tryTb4b4b4:
Tff7b72for Te6edf3iface Tff7b72in Te6edf3osTff7b72.Td2a8fflistdirTb4b4b4(Ta5d6ff'Ta5d6ff/sys/class/netTa5d6ff'Tb4b4b4)Tb4b4b4:
Te6edf3carrier Tff7b72= Tff7b72None
Te6edf3speed Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Ta5d6fffTa5d6ff'Ta5d6ff/sys/class/net/Tffd700{Te6edf3ifaceTffd700}Ta5d6ff/carrierTa5d6ff'Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4: Te6edf3carrier Tff7b72= Tffa657intTb4b4b4(Te6edf3fTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72== T79c0ff1
Tff7b72except Tf85149FileNotFoundErrorTb4b4b4: Tff7b72pass
Tff7b72if Te6edf3ifaceTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff'Ta5d6ffethTa5d6ff'Tb4b4b4) Tff7b72or Te6edf3ifaceTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff'Ta5d6ffwlanTa5d6ff'Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Ta5d6fffTa5d6ff'Ta5d6ff/sys/class/net/Tffd700{Te6edf3ifaceTffd700}Ta5d6ff/speedTa5d6ff'Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4: Te6edf3speed Tff7b72= Tffa657intTb4b4b4(Te6edf3fTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72except Tb4b4b4(Tf85149FileNotFoundErrorTb4b4b4, Tf85149ValueErrorTb4b4b4)Tb4b4b4: Tff7b72pass
Te6edf3telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4)
Te6edf3speed_str Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff at Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettyspeedTb4b4b4(Te6edf3speedTff7b72*T79c0ff1e6Tb4b4b4)Tffd700}Ta5d6ff" Tff7b72if Te6edf3speed Tff7b72else Ta5d6ff"Ta5d6ff"
Te6edf3sensors_str Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffcarrierTffd700{Te6edf3speed_strTffd700}Ta5d6ff" Tff7b72if Te6edf3carrier Tff7b72else Ta5d6ff"Ta5d6ffhas no carrierTa5d6ff"
Te6edf3telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupdate_entryTb4b4b4(Te6edf3valueTff7b72=Ta5d6fffTa5d6ff"Tffd700{Te6edf3sensors_strTffd700}Ta5d6ff"Tb4b4b4, Te6edf3type_labelTff7b72=Ta5d6fffTa5d6ff"Tffd700{Te6edf3ifaceTffd700}Ta5d6ff"Tb4b4b4, Te6edf3custom_iconTff7b72=Ta5d6ff"Ta5d6fflanTa5d6ff" Tff7b72if Te6edf3carrier Tff7b72else Ta5d6ff"Ta5d6fflan-disconnectTa5d6ff"Tb4b4b4)

Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffGetting network stats failed: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)

T8b949e# Finally, tell Sideband what class in this
T8b949e# file is the actual plugin class.
Te6edf3plugin_class Tff7b72= Te6edf3RasPiTelemetryPlugin

Served by rngit 1.4.2 - Generated in 0.04s